// src/composables/useLogin.js
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import { useAuthStore } from '../store/auth';
import { useToast } from './useToast';
import { useApi } from './useApi';

export function useLogin() {
    // 组合式 API：路由实例，用于登录成功后跳转
    const router = useRouter();
    // 认证状态管理，存/取 token 等
    const auth = useAuthStore();
    // Toast 组件的成功和错误提示函数
    const { success, error } = useToast();

    // 创建响应式变量，存储用户名和密码（初始值只是方便调试）
    const username = ref('');
    const password = ref('');

    // 用 useApi 手动 POST 登录
    const { loading, result, fetchData } = useApi({
        url: '/auth/login',
        method: 'post',
        manual: true
    });

    // 提交登录
    async function login() {
        try {
            // 调用接口
            await fetchData({
                data: {
                    username: username.value,
                    password: password.value
                }
            });
            // 接口响应结果
            const res = result.value;

            if (res?.code === 0) {
                // 检查接口是否返回token
                console.log('登录响应：', res);
                const token = res?.data?.access_token;
                if (token) {
                    auth.setToken(token); // 存储 token（Pinia）
                    success('登录成功！');
                    router.push('/'); // 登录后跳首页
                } else {
                    error('接口响应异常，未获取到token');
                }
            } else {
                error(res?.msg);
            }
        } catch (err) {
            // useApi 内部会自动处理错误弹窗，这里额外逻辑也可以写
            console.log(err);
        }
    }

    // 返回这些变量和函数，供组件使用
    return {
        username, // 用户名双向绑定
        password, // 密码双向绑定
        loading, // 请求loading状态
        login // 触发登录函数
    };
}
